package com.appspot.abcensys.server.DAO.JDO;

import java.util.ArrayList;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;

import com.appspot.abcensys.server.PMF;
import com.appspot.abcensys.server.DAO.VakDAO;
import com.appspot.abcensys.shared.Vak;

public class VakDAO_JDO implements VakDAO {

	private static final Logger log = Logger.getLogger(VakDAO_JDO.class.getName());
	
	/**
	 * Haalt een List<Vak> op a.d.v. bepaalde query
	 * 
	 * @param String
	 *            met de where conditie
	 * @return List<Vak> met vakken, anders null
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<Vak> getVak(String where) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		String query = "SELECT FROM " + Vak.class.getName() + " " + where;
		ArrayList<Vak> vakken = (ArrayList<Vak>) pm.newQuery(query).execute();

		vakken.size();
		pm.close();

		for (Vak v : vakken) {
			v.fix();
		}
		
		log.info("getVak(" + where + ") | Vakken: " + vakken);

		return vakken;
	}

	/**
	 * Voegt een vak toe
	 * 
	 * @param Vak
	 *            het toe te voegen vak
	 * @return true wanneer gelukt, anders false
	 */
	public boolean addVak(Vak v) {
		boolean result = false;
		ArrayList<Vak> vakken = getVak("WHERE vakCode == \"" + v.getVakCode() + "\"");
		if (vakken.isEmpty()) {
			PersistenceManager pmWrite = PMF.get().getPersistenceManager();
			try {
				result = true;
				pmWrite.makePersistent(v);
			} finally {
				pmWrite.close();
			}
		}
		
		log.info("addVak(" + v.toString() + ") | Is gelukt: " + result);
		
		return result;
	}
}
